// main.go
package main

import (
	"library-system/config"
	"library-system/middlewares"
	"library-system/routes"
	"log"

	"github.com/gin-gonic/gin"
)

// main.go
// @title Library Management API
// @version 1.0
// @description 图书馆管理系统API文档
func main() {

	// 初始化应用配置
	initAppConfig()

	// 创建Gin实例（默认包含Logger和Recovery中间件）
	router := gin.Default()

	// 注册全局中间件
	registerGlobalMiddlewares(router)

	// 初始化所有业务路由
	routes.SetupRoutes(router)

	// 启动服务
	startServer(router)
}

// 初始化应用配置（数据库、环境变量等）
func initAppConfig() {
	// 从配置源获取DSN（示例使用硬编码，实际建议用环境变量或配置文件）
	dsn := config.GetDatabaseDSN()

	// 初始化数据库连接
	if err := config.InitDB(dsn); err != nil {
		log.Fatalf("Failed to initialize database: %v", err)
	}

	// 其他初始化逻辑（如Redis等）...
}

// 注册全局中间件（对所有路由生效）
func registerGlobalMiddlewares(router *gin.Engine) {
	// 第一顺位：请求日志（最先记录请求进入时间）
	router.Use(middlewares.RequestLogger())

	// CORS中间件
	router.Use(middlewares.CORS())

	// 可在此添加其他全局中间件（如请求日志、限流等）
	// router.Use(middlewares.RequestLogger())
}

// 优雅启动HTTP服务
func startServer(router *gin.Engine) {
	// 从配置获取端口（示例硬编码，建议配置化）
	port := ":8080"

	log.Printf("Server starting on port %s", port)
	if err := router.Run(port); err != nil {
		log.Fatalf("Server startup failed: %v", err)
	}
}
